package com.skyMailbox.sms.service.helper;

import com.skyMailbox.sms.to.Sms;

import java.text.SimpleDateFormat;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.TreeMap;


public class ProcesadorMensajes implements Runnable {

    private String messageString = null;
    private final String CRLF = "\r\n";
    SimpleDateFormat formatoDelTexto = new SimpleDateFormat("yy/MM/dd");
    SimpleDateFormat formatoDeHora = new SimpleDateFormat("HH:mm:ss");
    Thread readThread;


    public ProcesadorMensajes(String mensaje) {
        messageString = mensaje;
    }

    public void procesarMensaje(String mensaje) {

        if (mensaje.equals("+"))
            mensaje = CRLF + "+CMTI: \"SM\",1" + CRLF;

        System.out.println("Mensaje = " + mensaje);

        Map<Integer, String> stringMap = eliminarCRLF(mensaje);
        if (!"ERROR".equalsIgnoreCase(stringMap.get(1))) {
            Map<Integer, String> infoMS = extractData(stringMap.get(0));

            Sms sms = new Sms();
            sms.setC1_telefono(infoMS.get(1));
            /*try {
                sms.setC1_fecha_hora_recepcion(formatoDelTexto.parse(infoMS.get(2).replace('\"', ' ').trim()));
            } catch (ParseException e) {
                System.out.println("error parcenado la fecha = " + e);
            }
            try {
                sms.setC1_hora_recepcion(formatoDeHora.parse(infoMS.get(3).replace('\"', ' ').trim()));
            } catch (ParseException e) {
                System.out.println("error parcenado la hora = " + e);
            }*/
            sms.setC1_texto_mensaje(stringMap.get(1));
            sms.setC1_telefono(stringMap.get(2));
            sms.setC1_texto_original(mensaje);
            System.out.println("objeto = " + sms.toString());
            //new PruebaMySQL(sms);
            this.setMessageString(null);
        }


    }

    public Map<Integer, String> eliminarCRLF(String mensaje) {
        Map<Integer, String> stringMap = new TreeMap<Integer, String>();
        StringTokenizer tokens = new StringTokenizer(mensaje, CRLF);
        int i = 0;
        while (tokens.hasMoreTokens()) {
            stringMap.put(i++, tokens.nextToken());
        }
        return stringMap;
    }

    public Map<Integer, String> extractData(String mensaje) {
        Map<Integer, String> stringMap = new TreeMap<Integer, String>();
        StringTokenizer tokens = new StringTokenizer(mensaje, ",");
        int i = 0;
        while (tokens.hasMoreTokens()) {
            stringMap.put(i++, tokens.nextToken());
        }
        return stringMap;
    }

    public void run() {
        if (messageString != null) {
            System.out.println("HILO START");
            procesarMensaje(messageString);
        }
        try {
            Thread.sleep(20000);
            System.out.println("HILO END");
        } catch (InterruptedException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }
    }

    public String getMessageString() {
        return messageString;
    }

    public void setMessageString(String messageString) {
        this.messageString = messageString;
    }
}

